﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;

using System.Text;
using System.Windows.Forms;
using QUANLYCHAMCONG.BL.Entities;
using Hopthoai;
using QUANLYCHAMCONG.BL.BUS;
using DgvFilterPopup;

namespace QUANLYCHAMCONG.PL.CMS.Danhmuc
{
    public partial class hopdong : UserControl
    {
      
        int flag=0;
        frmHoidap f;
        public delegate void _Close();
        public event _Close Close;
        HOPDONG hd;
        public hopdong()
        {
            InitializeComponent();
        }
        private void SetLink()
        {
            this.links1.SetValues("Danh mục", "Hợp đồng");
        }
        private void hopdong_Load(object sender, EventArgs e)
        {
            SetLink();
            Event();
        }
        void Event()
        {
            this.toolbar1.Add += new Toolbar._Add(toolbar1_Add);
            this.toolbar1.Edit += new Toolbar._Edit(toolbar1_Edit);
            this.toolbar1.Delete += new Toolbar._Delete(toolbar1_Delete);
            this.toolbar1.Save += new Toolbar._Save(toolbar1_Save);
            this.toolbar1.Close += new Toolbar._Close(toolbar1_Close);
            this.toolbar1.Refresh += new Toolbar._Refesh(Refresh);
            LoadData();
        }
        void toolbar1_Close()
        {
            if (this.Close != null)
                this.Close();
        }
        void Refresh()
        {
            RemoveCheckbox();
            this.toolbar1.SetSave();
            this.flag = 0;
            this.dgvhopdong.ReadOnly = true;
            this.dgvhopdong.AllowUserToAddRows = true;
            LoadData();
            this.Clear();
        }
        HOPDONG AddData(HOPDONG hds)
        {
          
            hds.MAHD = txtmahd.Text;
            hds.MALHD = cmbloaihd.SelectedValue.ToString();
            hds.MANV = cmbnv.SelectedValue.ToString();
            hds.MATG = cmthoigian.SelectedValue.ToString();
            hds.NGAYBD = dtpngaybd.Value;
            hds.NGAYKT = dtpngaykt.Value;
            hds.THOIHAN = int.Parse(txtthoigianhieuluc.Text);
            return hds;
        }
        void toolbar1_Save()
        {
            hd=new HOPDONG();
            if (flag == 1)//save
            {
                // check ton tai hop dong 
                DataTable dt = new DataTable();
                hd.MANV = cmbnv.SelectedValue.ToString();
                hd.NGAYBD = dtpngaybd.Value;
                hd.NGAYKT = dtpngaykt.Value;
                dt = HOPDONGBUS.CheckExists(hd);
                if (dt.Rows.Count != 0)
                {
                    f = new frmHoidap("Nhân viên này hiện đã đước ký hợp đồng rồi", frmHoidap.CO.an, frmHoidap.KHONG.an, frmHoidap.THOAT.an, frmHoidap.HINH.baoloi);
                    f.ShowDialog();
                }
                else
                {
                    if (HOPDONGBUS.Insert(AddData(hd)))
                    {
                        f = new frmHoidap("Thêm hợp đồng thành công", frmHoidap.CO.an, frmHoidap.KHONG.an, frmHoidap.THOAT.an, frmHoidap.HINH.thongtin);
                        f.ShowDialog();

                    }
                    else
                    {
                        f = new frmHoidap("Thêm hợp đồng bị lỗi", frmHoidap.CO.an, frmHoidap.KHONG.an, frmHoidap.THOAT.an, frmHoidap.HINH.thongtin);
                        f.ShowDialog();
                    }
                }
                Clear();
                LoadData();
                this.toolbar1.SetSave();
                this.flag = 0;
            }
            if (flag == 2)//update
            {
                if (HOPDONGBUS.Update(AddData(hd)))
                {
                    f = new frmHoidap("sửa hợp đồng thành công", frmHoidap.CO.an, frmHoidap.KHONG.an, frmHoidap.THOAT.an, frmHoidap.HINH.thongtin);
                    f.ShowDialog();

                }
                else
                {
                    f = new frmHoidap("sửa hợp đồng bị lỗi", frmHoidap.CO.an, frmHoidap.KHONG.an, frmHoidap.THOAT.an, frmHoidap.HINH.thongtin);
                    f.ShowDialog();
                }
                Clear();
                LoadData();
                this.toolbar1.SetSave();
                this.flag = 0;
            }
            if (flag == 3)//delete
            {
                bool kq = true;
                f = new frmHoidap("Bạn có chắc chắn muốn xóa dữ liệu về hợp đồng vừa chọn?", frmHoidap.CO.hien, frmHoidap.KHONG.hien, frmHoidap.THOAT.an, frmHoidap.HINH.dauhoi);
                if (f.ShowDialog() == DialogResult.Yes)
                {
                    foreach (DataGridViewRow dr in this.dgvhopdong.Rows)
                    {
                        try
                        {
                            if (dr.Cells[0].Value != null)
                            {
                                hd = new HOPDONG();
                                hd.MAHD = dr.Cells["MAHD"].Value.ToString();
                                kq=HOPDONGBUS.Delete(hd);
                            }
                        }
                        catch
                        {
                            
                        }
                    }
                    if (kq)
                    {
                        f = new frmHoidap("Xóa thành công hợp đồng !", frmHoidap.CO.an, frmHoidap.KHONG.an, frmHoidap.THOAT.an, frmHoidap.HINH.thongtin);
                        f.ShowDialog();
                    }
                    else
                    {
                        f = new frmHoidap("Xóa thất bại hợp đồng !", frmHoidap.CO.an, frmHoidap.KHONG.an, frmHoidap.THOAT.an, frmHoidap.HINH.baoloi);
                        f.ShowDialog();
                    }
                    RemoveCheckbox();
                    this.toolbar1.SetSave();
                    this.dgvhopdong.ReadOnly = true;
                    this.dgvhopdong.AllowUserToAddRows = true;
                    this.flag = 0;
                }
            }
        }

        void toolbar1_Delete()
        {
            flag = 3;
            this.dgvhopdong.ReadOnly = false;
            this.dgvhopdong.AllowUserToAddRows = false;
            this.toolbar1.SetAdd_Edit_Delete();
            AddCheckbox(HOPDONGBUS.SelectAll());
        }

        void toolbar1_Edit()
        {
            flag = 2;
            Clear();
            this.dgvhopdong.Focus();
            this.dgvhopdong.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
            this.dgvhopdong.Rows[0].Selected = true;
            this.dgvhopdong.ReadOnly = false;
            this.dgvhopdong.AllowUserToAddRows = false;
            this.toolbar1.SetAdd_Edit_Delete();
        }

        void toolbar1_Add()
        {
            Clear();
            this.txtmahd.Text = HOPDONGBUS.GetID();
            this.toolbar1.SetAdd_Edit_Delete();
            flag = 1;
            cmbloaihd.Focus();
            this.txtthoigianhieuluc.Text = "1";
        }
        void LoadData()
        {
            LoadCombobox();
            Common.HightLightDataGridViewRow(ref this.dgvhopdong, HOPDONGBUS.SelectAll());
            InitGrid();
        }
        private void InitGrid()
        {
            DgvFilterManager f = new DgvFilterManager();
            f.ColumnFilterAdding += new ColumnFilterEventHandler(f_ColumnFilterAdding);
            f.DataGridView = (DataGridView)this.dgvhopdong;
        }
        void f_ColumnFilterAdding(object sender, ColumnFilterEventArgs e)
        {
            switch (e.Column.Name)
            {
                case "TENNV":
                case "TENLHD":
                    e.ColumnFilter = new DgvComboBoxColumnFilter();
                    break;
            }
        }
        void LoadCombobox()
        {
            this.cmbnv.DataSource = STAFFBUS.SelectAll();
            this.cmbnv.DisplayMember = "TENNV";
            this.cmbnv.ValueMember = "MANV";
            this.cmthoigian.DataSource = LOAITGBUS.SelectAll();
            this.cmthoigian.DisplayMember = "TENTG";
            this.cmthoigian.ValueMember = "MALG";
            this.cmthoigian.SelectedIndex=this.cmthoigian.FindString("Tháng");
            this.cmbloaihd.DataSource = LOAIHDBUS.SelectAll();
            this.cmbloaihd.DisplayMember = "TENLHD";
            this.cmbloaihd.ValueMember = "MALHD";
        }
        void Clear()
        {
            foreach (Control c in this.Controls)
            {
                if (c is Panel)
                {
                    foreach (Control d in c.Controls)
                    {
                        if (d is TextBox)
                            d.Text = "";
                    }
                }
            }
        }
        private int FindAviable()
        {
            foreach (DataGridViewColumn dr in this.dgvhopdong.Columns)
            {
                if (dr is DataGridViewCheckBoxColumn)
                    return 1;
            }
            return 0;
        }
        private void RemoveCheckbox()
        {
            if (FindAviable() == 1)
            {
                this.dgvhopdong.Columns.RemoveAt(0);
                this.dgvhopdong.Controls.RemoveByKey(((CheckBox)this.dgvhopdong.Controls.Find("checkboxHeader", true)[0]).Name);
                LoadData();
            }
        }
        private void AddCheckbox(DataTable dt)
        {
            if (FindAviable() == 0)
            {
                DataGridViewCheckBoxColumn cb = new DataGridViewCheckBoxColumn();
                cb.Width = 30;
                cb.FillWeight = 30;
                cb.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
                this.dgvhopdong.Columns.Insert(0, cb);
                Rectangle rect = this.dgvhopdong.GetCellDisplayRectangle(0, -1, true);
                rect.X = rect.Location.X + cb.Width / 10;
                CheckBox checkboxHeader = new CheckBox();
                checkboxHeader.Name = "checkboxHeader";
                checkboxHeader.Size = new Size(18, 18);
                checkboxHeader.Location = rect.Location;
                checkboxHeader.CheckedChanged += new EventHandler(checkboxHeader_CheckedChanged);
                this.dgvhopdong.Controls.Add(checkboxHeader);
                this.dgvhopdong.Columns[0].Width = 50;
                this.dgvhopdong.DataSource = dt;
            }
        }
        void checkboxHeader_CheckedChanged(object sender, EventArgs e)
        {
            if (((CheckBox)this.dgvhopdong.Controls.Find("checkboxHeader", true)[0]).Checked == true)
            {
                for (int i = 0; i < this.dgvhopdong.RowCount; i++)
                {
                    this.dgvhopdong[0, i].Value = ((CheckBox)this.dgvhopdong.Controls.Find("checkboxHeader", true)[0]).Checked;
                }
            }
            else
            {
                for (int i = 0; i < this.dgvhopdong.RowCount; i++)
                {
                    this.dgvhopdong[0, i].Value = false;
                }
            }
        }

        private void dtpngaybd_ValueChanged(object sender, EventArgs e)
        {
            string year = dtpngaybd.Value.Year.ToString();
         
            DateTime ngayhoanthanh;
            if (!String.IsNullOrEmpty(txtthoigianhieuluc.Text))
            {
                int giatri=int.Parse(txtthoigianhieuluc.Text);
                if (cmthoigian.Text.ToString() == "Ngày")
                {
                    ngayhoanthanh = dtpngaybd.Value.AddDays(giatri);
                    dtpngaykt.Value = ngayhoanthanh;
                }
                if (cmthoigian.Text.ToString() == "Tháng")
                {
                    ngayhoanthanh = dtpngaybd.Value.AddMonths(giatri);
                    dtpngaykt.Value = ngayhoanthanh;
                }
                if (cmthoigian.Text.ToString() == "Năm")
                {
                    ngayhoanthanh = dtpngaybd.Value.AddYears(giatri);
                    dtpngaykt.Value = ngayhoanthanh;
                }
            }
        }
        int AddYear(string year)
        {
            int y = int.Parse(year);
            if (DateTime.IsLeapYear(y))
                return 365;
            else
                return 366;
        }
        int AddDay(int Month, string year)
        {
            int songay = 0;
            int y = int.Parse(year);
            switch (Month)
            {
                case 1:
                case 3:
                case 5:
                case 7:
                case 8:
                case 10:
                case 12:
                    {
                        songay = 31;
                        break;
                    }
                case 2:
                    {
                        if (DateTime.IsLeapYear(y))
                            songay = 29;
                        else
                            songay = 28;
                        break;
                    }
                case 4:
                case 6:
                case 11:
                case 9:
                    {
                        songay = 30;
                        break;
                    }
            }
            return songay;
        }

        private void txtthoigianhieuluc_Leave(object sender, EventArgs e)
        {
            if (String.IsNullOrEmpty(txtthoigianhieuluc.Text))
            {
                f = new frmHoidap("Không thể để trống giá trị thời gian", frmHoidap.CO.an, frmHoidap.KHONG.an, frmHoidap.THOAT.an, frmHoidap.HINH.baoloi);
                f.ShowDialog();
                txtthoigianhieuluc.Focus();
            }
            else
            {
                string year = dtpngaybd.Value.Year.ToString();
                DateTime ngayhoanthanh;
                int giatri = int.Parse(txtthoigianhieuluc.Text);
                if (cmthoigian.Text.ToString() == "Ngày")
                {
                    ngayhoanthanh = dtpngaybd.Value.AddDays(giatri);
                    dtpngaykt.Value = ngayhoanthanh;
                }
                if (cmthoigian.Text.ToString() == "Tháng")
                {
                    ngayhoanthanh = dtpngaybd.Value.AddMonths(giatri);
                    dtpngaykt.Value = ngayhoanthanh;
                }
                if (cmthoigian.Text.ToString() == "Năm")
                {
                    ngayhoanthanh = dtpngaybd.Value.AddYears(giatri);
                    dtpngaykt.Value = ngayhoanthanh;
                }
            }
        }
        void ChooseData(object sender, int e)
        {
            if (flag == 2)
            {
                try
                {
                    this.dgvhopdong.EndEdit();
                    DataGridViewRow dr = this.dgvhopdong.Rows[e];
                    txtmahd.Text = dr.Cells["MAHD"].Value.ToString();
                    txtthoigianhieuluc.Text = dr.Cells["THOIHAN"].Value.ToString();
                    this.cmbloaihd.SelectedIndex=this.cmbloaihd.FindString(dr.Cells["TENLHD"].Value.ToString());
                    this.cmbnv.SelectedIndex = this.cmbnv.FindString(dr.Cells["TENNV"].Value.ToString());
                    this.cmthoigian.SelectedIndex = this.cmthoigian.FindString(dr.Cells["TENTG"].Value.ToString());
                    dtpngaybd.Value=DateTime.Parse(dr.Cells["NGAYBD"].Value.ToString());
                    dtpngaykt.Value=DateTime.Parse(dr.Cells["NGAYKT"].Value.ToString());
                }
                catch { return; };
            }
        }

        private void dgvhopdong_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
        {
            ChooseData(sender, e.RowIndex);
        }

        private void dgvhopdong_CellStateChanged(object sender, DataGridViewCellStateChangedEventArgs e)
        {
            ChooseData(sender, 0);
        }

        private void dgvhopdong_RowEnter(object sender, DataGridViewCellEventArgs e)
        {
            ChooseData(sender, e.RowIndex);
        }

        private void cmthoigian_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (this.cmthoigian.SelectedValue.ToString() != ""&&(flag==1||flag==2))
            {
                if (!String.IsNullOrEmpty(txtthoigianhieuluc.Text))
                {
                    string year = dtpngaybd.Value.Year.ToString();
                    DateTime ngayhoanthanh;
                    int giatri = int.Parse(txtthoigianhieuluc.Text);
                    if (cmthoigian.Text.ToString() == "Ngày")
                    {
                        ngayhoanthanh = dtpngaybd.Value.AddDays(giatri);
                        dtpngaykt.Value = ngayhoanthanh;
                    }
                    if (cmthoigian.Text.ToString() == "Tháng")
                    {
                        ngayhoanthanh = dtpngaybd.Value.AddMonths(giatri);
                        dtpngaykt.Value = ngayhoanthanh;
                    }
                    if (cmthoigian.Text.ToString() == "Năm")
                    {
                        ngayhoanthanh = dtpngaybd.Value.AddYears(giatri);
                        dtpngaykt.Value = ngayhoanthanh;
                    }
                }
            }
        }
    }
}
